package com.lefevre.cms.bean.membershipCard;

import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;

/**
 * 会员卡赠送任务
 * <p>
 * 在赠送任务有效期范围内的活跃用户才能获取赠送
 *
 * @author Lefevre
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("membership_card_gift_task")
@Entity
@Table(name = "membership_card_gift_task", indexes = {@Index(name = "membership_card_gift_task_1_idx", columnList = "expirationDate_start,expirationDate_end,type,enable")})
public class MembershipCardGiftTask implements Serializable {
    private static final long serialVersionUID = -4967838483890649996L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @TableId(type = IdType.INPUT)
    private Long id;

    /**
     * 名称
     **/
    @Column(length = 190)
    @TableField("`name`")
    private String name;

    /**
     * 角色Id
     **/
    @Column(length = 32)
    @TableField("userRoleId")
    private String userRoleId;

    /**
     * 用户角色名称
     **/
    @Column(length = 192)
    @TableField("userRoleName")
    private String userRoleName;

    /**
     * 任务类型 10:长期  20:一次性
     **/
    @TableField("type")
    private Integer type = 10;

    /**
     * 任务创建时间
     **/
    @Temporal(TemporalType.TIMESTAMP)
    @TableField("createDate")
    private Date createDate = new Date();

    /**
     * 限制条件 restrictionGroupList值的json格式字符
     **/
    @Lob
    @TableField("restriction")
    private String restriction;

    /**
     * 限制条件组集合
     **/
    @Transient
    @TableField(exist = false)
    private RestrictionGroup restrictionGroup = new RestrictionGroup();

    /**
     * 任务有效期范围起始(本参数只在'长期任务'中有效)  默认：1970-1-1 00:00:00
     **/
    @Temporal(TemporalType.TIMESTAMP)
    @TableField("expirationDate_start")
    private Date expirationDate_start;

    /**
     * 任务有效期范围结束(本参数只在'长期任务'中有效)  默认：2999-1-1 00:00:00
     **/
    @Temporal(TemporalType.TIMESTAMP)
    @TableField("expirationDate_end")
    private Date expirationDate_end;

    /**
     * 是否启用(本参数只在'长期任务'中有效)  true:启用 false:禁用
     **/
    @TableField("`enable`")
    private boolean enable = true;

    /**
     * 赠送时长
     **/
    @TableField("duration")
    private Integer duration;

    /**
     * 赠送时长时长单位 10.小时 20.日 30.月 40.年
     **/
    @TableField("`unit`")
    private Integer unit;

    /**
     * 版本号
     **/
    @Version
    private Integer version = 0;
}
